home *** CD-ROM | disk | FTP | other *** search
/ Creative Computers / Creative Computers CD-ROM, Volume 1 (Legendary Design Technologies, Inc.)(1994).iso / shareware / intuition / yak_1.57 / source / settings.c < prev    next >
C/C++ Source or Header  |  1994-11-17  |  9KB  |  361 lines

  1.  /*
  2.  * Variables controlling Yak settings.
  3.  * Routines for initialisation at startup.
  4.  */
  5.  
  6. #include <exec/types.h>
  7. #include <dos/dos.h>
  8. #include <dos/dosextens.h>
  9. #include <libraries/commodities.h>
  10. #include <proto/dos.h>
  11. #include <string.h>
  12.  
  13. #include "yak.h"
  14. #include "hotkey_types.h"
  15. #include "popup.h"
  16. #define CATCOMP_NUMBERS
  17. #include "yak_locale_strings.h"
  18.  
  19. extern struct DosLibrary *DOSBase;
  20.  
  21.  
  22. /* local prototypes */
  23. static BOOL __regargs FWriteLong(BPTR fh, LONG n);
  24. static BOOL __regargs FReadLong(BPTR fh, LONG *n);
  25. static BOOL __regargs FWriteString(BPTR fh, char *buf);
  26. static BOOL __regargs FReadString(BPTR fh, char *buf, LONG len);
  27. static void LoadHotKeys(void);
  28. static void SaveHotKeys(void);
  29.  
  30. #define DEF_AUTOPOINT_DELAY      2
  31. LONG    autopoint_delay = DEF_AUTOPOINT_DELAY;  /* used for autopoint */
  32.  
  33. #define DEF_VOLUME      48
  34. LONG    click_volume = DEF_VOLUME;              /* used for keyclick */
  35.  
  36. #define DEF_BLANKSECS   300
  37. LONG    blanksecs = DEF_BLANKSECS;
  38. LONG    blanktimeout;
  39. LONG    blankcount;                             /* countdown to blank-time */
  40.  
  41. #define DEF_MBLANKSECS  5
  42. LONG    mouseblank = MB_SPRITES;
  43. LONG    mblanksecs = DEF_MBLANKSECS;
  44. LONG    mblanktimeout;
  45. LONG    mblankcount;                    /* countdown to mouse-blank-time */
  46.  
  47.  
  48. LONG     qualifier = MMB_NOTHING ;
  49.  
  50. TOGGLEDATA toggles[] = {                /* -1 means UNUSED */
  51.         TRUE,   GDX_CTFCheck,
  52.         TRUE,   GDX_CTBCheck,
  53.         TRUE,   GDX_AutoCheck,
  54.         FALSE,  GDX_KeyActCheck,
  55.         TRUE,   GDX_ScrCycleCheck,
  56.         FALSE,  GDX_AutoPopCheck,
  57.         FALSE,  GDX_RMBActCheck,
  58.         FALSE,  -1,
  59.         FALSE,  -1,
  60.         FALSE,  GDX_WildStarCheck,
  61.         TRUE,   GDX_ScrActCheck,
  62.         FALSE,  GDX_NoClickCheck,
  63.         FALSE,  GDX_MMBActCheck
  64. };
  65.  
  66. PATTERNDATA patterns[NUM_PATTERNS] = {
  67.         { "#?", NULL },                 /* autoactivation screens */
  68.         { "#?", NULL },                 /* click screens */
  69.         { "~(Workbench)", NULL },       /* autopop windows */
  70.         { "~(Workbench)", NULL }        /* click windows */
  71. };
  72.  
  73. /* 1.5 format
  74.  * Routines to load/save config file for Yak.
  75.  * Should handle config files in upward-compatible manner.
  76.  * File format:
  77.  *
  78.  *      LONG ID
  79.  *      LONG NUM_TOGGLES
  80.  *      BOOL toggles
  81.  *      LONG NUM_HOTKEYS                **REMOVED @ v1.5
  82.  *      STR hotkey1 '\n'                        :
  83.  *              :                               :
  84.  *      STR hotkeyN '\n'                        :
  85.  *      LONG NUM_PATTERNS
  86.  *      STR pattern1 '\n'
  87.  *              :
  88.  *      STR patternN '\n'
  89.  *      STR popcommand '\n'             **REMOVED @ v1.5
  90.  *      STR datefmt '\n'                **REMOVED @ v1.5
  91.  *      LONG click_volume, blanksecs
  92.  *      LONG mblanksecs                 **ADDED @ v1.3b
  93.  *      LONG mouseblank                 **ADDED @ v1.3e
  94.  */
  95.  
  96. #define CONFIG_ID       0x594b3135      /* YK15 */
  97.  
  98. /* write a LONG to a file (in binary format) - returns success*/
  99. static BOOL __regargs
  100. FWriteLong(BPTR fh, LONG n)
  101. {
  102.         return (BOOL)(FWrite(fh, (UBYTE *)&n, sizeof(LONG), 1) == 1);
  103. }
  104.  
  105. /* read a LONG to a file (in binary format) - returns success */
  106. static BOOL __regargs
  107. FReadLong(BPTR fh, LONG *n)
  108. {
  109.         return (BOOL)(FRead(fh, (UBYTE *)n, sizeof(LONG), 1) == 1);
  110. }
  111.  
  112. /* write a string to a file (in binary format) - returns success*/
  113. /* '\n' is appended */
  114. static BOOL __regargs
  115. FWriteString(BPTR fh, char *buf)
  116. {
  117.         FPuts(fh, buf);
  118.         FPutC(fh, '\n');
  119.         return (BOOL)(IoErr() == 0);
  120. }
  121.  
  122. /* read a string to a file (in binary format) - returns success */
  123. /* '\n' is stripped and buf null-terminated; assumes dest large enough */
  124. static BOOL __regargs
  125. FReadString(BPTR fh, char *buf, LONG len)
  126. {
  127.         FGets(fh, buf, len-1);
  128.         buf[strlen(buf)-1] = '\0';      /* '\n' --> '\0' */
  129.         return (BOOL)(IoErr() == 0);
  130. }
  131.  
  132. /* save current settings to config file */
  133. void
  134. SaveSettings()
  135. {
  136.         BPTR    fh;
  137.         UWORD   i;
  138.  
  139.         if (fh = Open(CONFIG_FILE, MODE_NEWFILE))
  140.         {
  141.                 FWriteLong(fh, CONFIG_ID);
  142.  
  143.                 /* toggles */
  144.                 FWriteLong(fh, NUM_TOGGLES);
  145.                 for (i = 0; i < NUM_TOGGLES; i++)
  146.                         FWrite(fh, (UBYTE *)&toggles[i].pos, sizeof(BOOL), 1);
  147.  
  148.                 /* patterns */
  149.                 FWriteLong(fh, NUM_PATTERNS);
  150.                 for (i = 0; i < NUM_PATTERNS; i++)
  151.                         FWriteString(fh, patterns[i].patstr);
  152.  
  153.                 /* miscellaneous */
  154.                 FWriteLong(fh, click_volume);
  155.                 FWriteLong(fh, blanksecs);
  156.                 FWriteLong(fh, mblanksecs);
  157.                 FWriteLong(fh, mouseblank);
  158.                 FWriteLong(fh, autopoint_delay);
  159.  
  160.                 Close(fh);
  161.         }
  162.  
  163.         SaveHotKeys();
  164. }
  165.  
  166.  
  167.  
  168. /* load current settings from file */
  169. void
  170. LoadSettings()
  171. {
  172.         BPTR    fh;
  173.         UWORD   i;
  174.         LONG    n;
  175.  
  176.         if (fh = Open(CONFIG_FILE, MODE_OLDFILE))
  177.         {
  178.                 FReadLong(fh, &n);
  179.                 if (n == CONFIG_ID)
  180.                 {
  181.                         /* toggles */
  182.                         FReadLong(fh, &n);
  183.                         for (i = 0; i < n; i++)
  184.                                 FRead(fh, (UBYTE *)&toggles[i].pos, sizeof(BOOL), 1);
  185.  
  186.                         /* patterns */
  187.                         FReadLong(fh, &n);
  188.                         for (i = 0; i < n; i++)
  189.                                 FReadString(fh, patterns[i].patstr, PATLEN+1);
  190.  
  191.                         /* miscellaneous */
  192.                         FReadLong(fh, &click_volume);
  193.                         FReadLong(fh, &blanksecs);
  194.                         if (!FReadLong(fh, &mblanksecs))        /* none there */
  195.                                 mblanksecs = DEF_MBLANKSECS;
  196.                         if (!FReadLong(fh, &mouseblank))        /* none there */
  197.                                 mouseblank = MB_SPRITES;
  198.                         if (!FReadLong(fh, &autopoint_delay))   /* none there */
  199.                                 autopoint_delay = DEF_AUTOPOINT_DELAY;
  200.                 }
  201.                 else PostError(getString(Invalid_config_file_ERR));
  202.                 Close(fh);
  203.         }
  204.         DeleteYakHotKeyList();          /* delete old keys */
  205.         LoadHotKeys();                  /* and load new ones */
  206.  
  207.         /* set-up patterns */
  208.         for (i = 0; i < NUM_PATTERNS; i++)
  209.                 InitPattern(NULL, i);
  210.  
  211.         if (wildstar)
  212.                 WILDSTARON;
  213.         else
  214.                 wildstar = ((struct RootNode *)(DOSBase->dl_Root))->rn_Flags & RNF_WILDSTAR;
  215.  
  216.         
  217.         if (noclick) SetClickDrive(noclick);
  218.  
  219.         blankcount = blanktimeout = 10*blanksecs;
  220.         mblankcount = mblanktimeout = 10*mblanksecs;
  221. }
  222.  
  223. /*
  224.  *      HOTKEY FILE FORMAT
  225.  *
  226.  *      LONG    ID      'YKK1'
  227.  *      LONG NUM_HOTKEYS
  228.  *      UWORD type1
  229.  *      UWORD opts1
  230.  *      STR hotkey1 '\n'
  231.  *      STR argstr1 '\n'
  232.  *              :
  233.  *      STR hotkeyN '\n'
  234.  */
  235. #define HOTKEY_ID 0x594B4B31    /* 'YKK1' */
  236.  
  237. static void
  238. SaveHotKeys()
  239. {
  240.     YakHotKey *yhk;
  241.     BPTR    fh;
  242.     UWORD   type, i;
  243.     
  244.     if (fh = Open(HOTKEY_FILE, MODE_NEWFILE))
  245.     {
  246.         FWriteLong(fh, HOTKEY_ID);
  247.         
  248.         FWriteLong(fh, num_hkeys);
  249.         
  250.         for (type = 0; type < NUM_HOTKEY_TYPES; type++)
  251.             for (yhk = (YakHotKey *)keylist(type)->lh_Head, i = 0;
  252.                  i < numkeys(type);
  253.                  i++, yhk = (YakHotKey *)yhk->yhk_Node.ln_Succ)
  254.             {
  255.                 FWrite(fh, (UBYTE *)&yhk->yhk_Type, sizeof(UWORD), 1);
  256.                 FWrite(fh, (UBYTE *)&yhk->yhk_Options, sizeof(UWORD), 1);
  257.                 FWriteString(fh, yhk->yhk_KeyDef);
  258.                 FWriteString(fh, yhk->yhk_ArgStr ? yhk->yhk_ArgStr : "");
  259.             }
  260.  
  261.         Close(fh);
  262.     }
  263. }
  264.  
  265. static void
  266. LoadHotKeys()
  267. {
  268.     YakHotKey *yhk;
  269.     char    *buf;
  270.     UWORD   type, opts;
  271.     BPTR    fh;
  272.     LONG    n;
  273.     UWORD   i;
  274.  
  275. #ifdef DEBUG
  276.     printf("Begin of LoadHotKeys()\n");
  277. #endif
  278.     if (!(buf = AllocVec(512, 0L)))
  279.     {
  280.         PostError(getString(No_memory_ERR));
  281.         return;
  282.     }
  283.     
  284.     if (fh = Open(HOTKEY_FILE, MODE_OLDFILE))
  285.     {
  286.         FReadLong(fh, &n);
  287.         
  288.         if (n == HOTKEY_ID)
  289.         {
  290.             FReadLong(fh, &n);
  291. #ifdef DEBUG
  292.             printf("  n = %d\n",n);
  293. #endif
  294.             for (i = 0; i < n; i++)
  295.             {
  296. #ifdef DEBUG
  297.                 printf("  i = %d\n",i);
  298. #endif
  299.                 if (FRead(fh, (UBYTE *)&type, sizeof(UWORD), 1) && 
  300.                     FRead(fh, (UBY